import Blockly from 'blockly'

Blockly.defineBlocksWithJsonArray([
  {
    type: 'controls_forever',
    message0: '%1',
    args0: [
      {
        type: 'field_label',
        text: '永远 循环'
      }
    ],
    message1: '%1',
    args1: [
      {
        type: 'input_statement',
        name: 'DO'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'controller',
    tooltip: '重复执行。'
  },
  {
    type: 'math_evenly_divisible',
    message0: '%1 能被 %2 整除',
    args0: [
      {
        type: 'input_value',
        name: 'DIVIDEND',
        check: 'Number',
        value: 0
      },
      {
        type: 'input_value',
        name: 'DIVISOR',
        check: 'Number',
        value: 0
      }
    ],
    output: 'Boolean',
    style: 'calculation',
    tooltip: '判断第一个数是否恰好被第二个数整除。'
  },
  {
    type: 'lists_split',
    message0: '把 %1 按 %2 %3',
    args0: [
      {
        type: 'input_value',
        name: 'INPUT',
        check: ['String', 'Array']
      },
      {
        type: 'input_value',
        name: 'DELIM',
        check: 'String'
      },
      {
        type: 'field_dropdown',
        name: 'MODE',
        options: [
          ['分开成列表', 'SPLIT'],
          ['合并为文本', 'JOIN']
        ]
      }
    ],
    output: ['String', 'Array'],
    style: 'calculation',
    tooltip: '将文本分开成列表或将列表合并为文本。'
  },
  {
    type: 'text_charAt',
    message0: '取 %1 %2 第 %3 个字符',
    args0: [
      {
        type: 'input_value',
        name: 'VALUE',
        check: 'String'
      },
      {
        type: 'field_dropdown',
        name: 'WHERE',
        options: [
          ['正数', 'FROM_START'],
          ['倒数', 'FROM_END']
        ]
      },
      {
        type: 'input_value',
        name: 'INDEX',
        check: 'Number'
      }
    ],
    output: 'String',
    style: 'calculation',
    tooltip: '取文本指定位置的字符。'
  },
  {
    type: 'text_getSubstring',
    message0: '取 %1 %2 第 %3 到 %4 第 %5 个字符',
    args0: [
      {
        type: 'input_value',
        name: 'VALUE',
        check: 'String'
      },
      {
        type: 'field_dropdown',
        name: 'WHERE1',
        options: [
          ['正数', 'FROM_START'],
          ['倒数', 'FROM_END']
        ]
      },
      {
        type: 'input_value',
        name: 'INDEX1',
        check: 'Number'
      },
      {
        type: 'field_dropdown',
        name: 'WHERE2',
        options: [
          ['正数', 'FROM_START'],
          ['倒数', 'FROM_END']
        ]
      },
      {
        type: 'input_value',
        name: 'INDEX2',
        check: 'Number'
      }
    ],
    output: 'String',
    style: 'calculation',
    tooltip: '取文本指定位置的字符。'
  },
  {
    type: 'math_types',
    message0: '把 %1 转换为 %2 类型',
    args0: [
      {
        type: 'input_value',
        name: 'VALUE'
      },
      {
        type: 'field_dropdown',
        name: 'TYPE',
        options: [
          ['字符串', 'STRING'],
          ['数值', 'NUMBER'],
          ['布尔', 'BOOLEAN']
        ]
      }
    ],
    output: 'String',
    style: 'calculation',
    tooltip: '将对象转换为指定类型。'
  },
  {
    type: 'lists_push',
    message0: '添加 %1 到 %2 末尾',
    args0: [
      {
        type: 'input_value',
        name: 'VALUE',
        check: 'Number'
      },
      {
        type: 'input_value',
        name: 'LIST',
        check: 'Array'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'lists',
    tooltip: '添加值到列表的末尾。'
  },
  {
    type: 'lists_insert',
    message0: '插入 %1 到 %2 %3 第 %4 项后面',
    args0: [
      {
        type: 'input_value',
        name: 'VALUE'
      },
      {
        type: 'input_value',
        name: 'LIST',
        check: 'Array'
      },
      {
        type: 'field_dropdown',
        name: 'WHERE',
        options: [
          ['正数', 'FROM_START'],
          ['倒数', 'FROM_END']
        ]
      },
      {
        type: 'input_value',
        name: 'INDEX',
        check: 'Number'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'lists',
    tooltip: '添加值到列表的末尾。'
  },
  {
    type: 'lists_delete',
    message0: '删除 %1 %2 第 %3 项',
    args0: [
      {
        type: 'input_value',
        name: 'LIST',
        check: 'Array'
      },
      {
        type: 'field_dropdown',
        name: 'WHERE',
        options: [
          ['正数', 'FROM_START'],
          ['倒数', 'FROM_END']
        ]
      },
      {
        type: 'input_value',
        name: 'INDEX',
        check: 'Number'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'lists_delete',
    tooltip: '删除列表的指定项。'
  },
  {
    type: 'lists_set',
    message0: '替换 %1 %2 第 %3 项为 %4',
    args0: [
      {
        type: 'input_value',
        name: 'LIST',
        check: 'Array'
      },
      {
        type: 'field_dropdown',
        name: 'WHERE',
        options: [
          ['正数', 'FROM_START'],
          ['倒数', 'FROM_END']
        ]
      },
      {
        type: 'input_value',
        name: 'INDEX',
        check: 'Number'
      },
      {
        type: 'input_value',
        name: 'VALUE'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'lists',
    tooltip: '替换列表的指定项。'
  },
  {
    type: 'lists_get',
    message0: '%1 %2 第 %3 项',
    args0: [
      {
        type: 'input_value',
        name: 'LIST',
        check: 'Array'
      },
      {
        type: 'field_dropdown',
        name: 'WHERE',
        options: [
          ['正数', 'FROM_START'],
          ['倒数', 'FROM_END']
        ]
      },
      {
        type: 'input_value',
        name: 'INDEX',
        check: 'Number'
      }
    ],
    output: 'Any',
    style: 'lists',
    tooltip: '获取列表的指定项。'
  },
  {
    type: 'lists_index',
    message0: '%1 中 %2 %3 的位置',
    args0: [
      {
        type: 'input_value',
        name: 'LIST',
        check: 'Array'
      },
      {
        type: 'field_dropdown',
        name: 'WHICH',
        options: [
          ['第一个', 'FIRST'],
          ['最后一个', 'LAST']
        ]
      },
      {
        type: 'input_value',
        name: 'VALUE'
      }
    ],
    output: 'Number',
    style: 'lists',
    tooltip: '返回在列表中的第一个/最后一个匹配项的索引值，如果找不到项目则返回列表本身。'
  },
  {
    type: 'lists_includes',
    message0: '%1 中包含 %2',
    args0: [
      {
        type: 'input_value',
        name: 'LIST',
        check: 'Array'
      },
      {
        type: 'input_value',
        name: 'VALUE'
      }
    ],
    output: 'Boolean',
    style: 'lists',
    tooltip: '列表中是否包含指定项。'
  },
  {
    type: 'time_current',
    message0: '当前时间戳',
    output: 'Number',
    style: 'time',
    tooltip: '获取当前时间戳。'
  },
  {
    type: 'time_timestamp_to_date',
    message0: '时间戳 %1 转换为日期字符串',
    args0: [
      {
        type: 'input_value',
        name: 'TIMESTAMP',
        check: 'Number'
      }
    ],
    output: 'String',
    style: 'time',
    tooltip: '将时间戳转换为日期字符串。'
  },
  {
    type: 'time_import',
    message0: '引入time库',
    previousStatement: null,
    nextStatement: null,
    style: 'time',
    tooltip: '引入时间库。'
  },
  {
    type: 'sqlite_open',
    message0: '打开数据库 %1',
    args0: [
      {
        type: 'input_value',
        name: 'DATABASE',
        check: 'String'
      }
    ],
    output: 'sqlite3.Connection',
    style: 'sqlite',
    tooltip: '打开数据库连接。'
  },
  {
    type: 'sqlite_query',
    message0: '执行查询 数据库：%1 SQL：%2',
    args0: [
      {
        type: 'input_value',
        name: 'DB',
        check: 'sqlite3.Connection'
      },
      {
        type: 'input_value',
        name: 'SQL',
        check: 'String'
      }
    ],
    output: 'Array',
    style: 'sqlite',
    tooltip: '执行SQL查询。'
  },
  {
    type: 'sqlite_exec',
    message0: '执行命令 %1',
    args0: [
      {
        type: 'input_value',
        name: 'COMMAND',
        check: 'String'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'sqlite',
    tooltip: '执行SQL命令。'
  },
  {
    type: 'sqlite_close',
    message0: '关闭数据库连接',
    previousStatement: null,
    nextStatement: null,
    style: 'sqlite',
    tooltip: '关闭数据库连接。'
  },
  {
    type: 'http_import',
    message0: '引入http库',
    previousStatement: null,
    nextStatement: null,
    style: 'http',
    tooltip: '引入HTTP库。'
  },
  {
    type: 'http_get',
    message0: '发送GET请求到 链接：%1 请求头（字典）：%2 cookie（字典）：%3',
    args0: [
      {
        type: 'input_value',
        name: 'URL',
        check: 'String'
      },
      {
        type: 'input_value',
        name: 'HEADERS',
        check: 'Array'
      },
      {
        type: 'input_value',
        name: 'COOKIES',
        check: 'Array'
      }
    ],
    output: 'http_response',
    style: 'http',
    tooltip: '发送GET请求。'
  },
  {
    type: 'http_post',
    message0: '发送POST请求到 链接：%1 请求体（字典）：%2 请求头（字典）：%3 cookie（字典）：%4',
    args0: [
      {
        type: 'input_value',
        name: 'URL',
        check: 'String'
      },
      {
        type: 'input_value',
        name: 'BODY',
        check: 'Array'
      },
      {
        type: 'input_value',
        name: 'HEADERS',
        check: 'Array'
      },
      {
        type: 'input_value',
        name: 'COOKIES',
        check: 'Array'
      }
    ],
    output: 'http_response',
    style: 'http',
    tooltip: '发送POST请求。'
  },
  {
    type: 'http_response_status',
    message0: '获取HTTP响应状态码 %1',
    args0: [
      {
        type: 'input_value',
        name: 'RESPONSE',
        check: 'http_response'
      }
    ],
    output: 'Number',
    style: 'http',
    tooltip: '获取HTTP响应的状态码'
  },
  {
    type: 'http_response_header',
    message0: '获取HTTP响应头 %1 键 %2',
    args0: [
      {
        type: 'input_value',
        name: 'RESPONSE',
        check: 'http_response'
      },
      {
        type: 'input_value',
        name: 'HEADER',
        check: 'String'
      }
    ],
    output: 'String',
    style: 'http',
    tooltip: '获取HTTP响应头中指定键的值'
  },
  {
    type: 'http_response_text',
    message0: '获取HTTP响应文本 %1',
    args0: [
      {
        type: 'input_value',
        name: 'RESPONSE',
        check: 'http_response'
      }
    ],
    output: 'String',
    style: 'http',
    tooltip: '获取HTTP响应的文本内容'
  },
  {
    type: 'http_response_json',
    message0: '获取HTTP响应JSON %1',
    args0: [
      {
        type: 'input_value',
        name: 'RESPONSE',
        check: 'http_response'
      }
    ],
    output: 'Object',
    style: 'http',
    tooltip: '获取HTTP响应的JSON对象'
  },

  {
    //字典
    type: 'json_parse',
    message0: '解析JSON字符串 %1',
    args0: [
      {
        type: 'input_value',
        name: 'JSON_STRING',
        check: 'String'
      }
    ],
    output: 'Object',
    style: 'json',
    tooltip: '将JSON字符串解析为Python字典对象'
  },
  {
    type: 'json_stringify',
    message0: '转为JSON字符串 键 %1 值 %2',
    args0: [
      {
        type: 'input_value',
        name: 'KEY',
        check: 'String'
      },
      {
        type: 'input_value',
        name: 'VALUE'
      }
    ],
    output: 'String',
    style: 'json',
    inline: true,
    extraState: {
      itemCount: 1
    },
    tooltip: '将键值对转换为JSON字符串'
  },
  {
    type: 'json_keys',
    message0: '获取 %1 的所有键',
    args0: [
      {
        type: 'input_value',
        name: 'DICT',
        check: 'Object'
      }
    ],
    output: 'Array',
    style: 'json',
    tooltip: '获取字典对象的所有键列表'
  },
  {
    type: 'json_get_path',
    message0: '获取 %1 路径 %2 的值',
    args0: [
      {
        type: 'input_value',
        name: 'DICT',
        check: 'Object'
      },
      {
        type: 'input_value',
        name: 'PATH',
        check: 'String'
      }
    ],
    output: 'Any',
    style: 'json',
    tooltip: '使用点路径语法获取嵌套字典的值'
  },
  {
    type: 'json_merge',
    message0: '合并字典 %1 和 %2',
    args0: [
      {
        type: 'input_value',
        name: 'JSON1',
        check: ['Object', 'Array', 'String']  // 添加 Array 类型支持
      },
      {
        type: 'input_value',
        name: 'JSON2',
        check: ['Object', 'Array', 'String']  // 添加 Array 类型支持
      }
    ],
    output: 'Object',
    style: 'json',
    tooltip: '合并两个字典对象'
  },
  // 在 http_import 积木之后添加
  {
    type: 'base64_import',
    message0: '引入base64库',
    previousStatement: null,
    nextStatement: null,
    style: 'json',
    tooltip: '引入Base64编码库'
  },
  {
    type: 'json_to_base64',
    message0: '将 %1 转为Base64',
    args0: [
      {
        type: 'input_value',
        name: 'DICT',
        check: 'Object'
      }
    ],
    output: 'String',
    style: 'json',
    tooltip: '将字典对象序列化为Base64编码字符串'
  },
  {
    type: 'text_base64_encode',
    message0: '将 %1 编码为Base64',
    args0: [
      {
        type: 'input_value',
        name: 'TEXT',
        check: 'String'
      }
    ],
    output: 'String',
    style: 'json',
    tooltip: '将文本编码为Base64字符串'
  },
  {
    type: 'text_base64_decode',
    message0: '解码Base64字符串 %1',
    args0: [
      {
        type: 'input_value',
        name: 'BASE64',
        check: 'String'
      }
    ],
    output: 'String',
    style: 'json',
    tooltip: '将Base64字符串解码为原始文本'
  },
  {
    type: 'dict_get',
    message0: '获取字典 %1 的键 %2 的值',
    args0: [
      {
        type: 'input_value',
        name: 'DICT',
        check: 'Array'
      },
      {
        type: 'input_value',
        name: 'KEY',
        check: 'String'
      }
    ],
    output: 'Any',
    style: 'dict',
    tooltip: '获取字典的指定键的值。'
  },
  //定义字典
  {
    type: 'dict_create',
    message0: '创建字典',
    output: 'Array',
    style: 'dict',
    tooltip: '创建一个空字典。'
  },
  //设置字典键
  {
    type: 'dict_set',
    message0: '设置字典 %1 的键 %2 的值为 %3',
    args0: [
      {
        type: 'input_value',
        name: 'DICT',
        check: 'Array'
      },
      {
        type: 'input_value',
        name: 'KEY',
        check: 'String'
      },
      {
        type: 'input_value',
        name: 'VALUE'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'dict',
    tooltip: '设置字典的指定键的值。'
  },
  {
    type: 'set_dict',
    message0: '创建字典 键 %1 ： %2',
    args0: [
      {
        type: 'input_value',
        name: 'KEY',
        check: 'String'
      },
      {
        type: 'input_value',
        name: 'VALUE'
      }
    ],
    output: 'Array',
    style: 'dict',
    tooltip: '创建一个空字典。'
  },
  {
    type: 'console_log',
    message0: '打印 %1',
    args0: [
      {
        type: 'input_value',
        name: 'VALUE'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'controller',
    tooltip: '打印值到控制台。'
  },
  {
    type: 'sqlite_import',
    message0: '引入sqlite3库',
    previousStatement: null,
    nextStatement: null,
    style: 'sqlite',
    tooltip: '引入sqlite3库。'
  },
  // 在已有base64积木之后添加
  {
    type: 'md5_import',
    message0: '引入哈希库',
    previousStatement: null,
    nextStatement: null,
    style: 'data_encoding',
    tooltip: '引入哈希算法支持库'
  },
  {
    type: 'md5_hash',
    message0: '生成MD5哈希 文本 %1',
    args0: [
      {
        type: 'input_value',
        name: 'TEXT',
        check: 'String'
      }
    ],
    output: 'String',
    style: 'data_encoding',
    tooltip: '生成文本的MD5哈希值'
  },

  // 在Blockly.defineBlocksWithJsonArray数组中添加：
  {
    type: 'file_open',
    message0: '打开文件 %1 模式 %2',
    args0: [
      { type: 'input_value', name: 'FILENAME', check: 'String' },
      {
        type: 'field_dropdown', name: 'MODE',
        options: [
          ['读取', 'r'],
          ['写入', 'w'],
          ['追加', 'a']
        ]
      }
    ],
    output: null,
    style: 'io'
  },
  {
    type: 'file_read',
    message0: '读取文件 %1',
    args0: [{ type: 'input_value', name: 'FILE', check: 'File' }],
    output: 'String',
    style: 'io'
  },
  {
    type: 'file_write',
    message0: '写入文件 %1 内容 %2',
    args0: [
      { type: 'input_value', name: 'FILE', check: 'File' },
      { type: 'input_value', name: 'CONTENT', check: 'String' }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'io'
  },
  {
    type: 'queue_import',
    message0: '导入queue模块',
    previousStatement: null,
    nextStatement: null,
    style: 'queue',
    tooltip: '导入Python的queue模块'
  },
  {
    type: 'queue_create',
    message0: '创建队列',
    output: 'queue',
    style: 'queue',
    tooltip: '创建一个空队列'
  },
  {
    type: 'queue_enqueue',
    message0: '入队 %1 到队列 %2',
    args0: [
      {
        type: 'input_value',
        name: 'ITEM'
      },
      {
        type: 'input_value',
        name: 'QUEUE',
        check: 'queue'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'queue',
    tooltip: '将元素添加到队列末尾'
  },
  {
    type: 'queue_dequeue',
    message0: '从队列 %1 出队',
    args0: [
      {
        type: 'input_value',
        name: 'QUEUE',
        check: 'queue'
      }
    ],
    output: 'Any',
    style: 'queue',
    tooltip: '移除并返回队列的第一个元素'
  },
  {
    type: 'queue_is_empty',
    message0: '队列 %1 是否为空',
    args0: [
      {
        type: 'input_value',
        name: 'QUEUE',
        check: 'queue'
      }
    ],
    output: 'Boolean',
    style: 'queue',
    tooltip: '检查队列是否为空'
  },

  {
    type: 'threading_import',
    message0: '导入 threading 模块',
    style: 'threading',
    tooltip: '导入Python threading模块',
    previousStatement: null,
    nextStatement: null,
  },
  {
    type: 'threading_create',
    message0: '创建线程 %1 执行 %2',
    args0: [
      {
        type: 'input_value',
        name: 'NAME',
        check: 'String'
      },
      {
        type: 'input_statement',
        name: 'FUNCTION'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'threading',
    tooltip: '创建一个新的线程'
  },
  {
    type: 'threading_start',
    message0: '启动线程 %1',
    args0: [
      {
        type: 'input_value',
        name: 'THREAD',
        check: 'thread'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'threading',
    tooltip: '启动线程执行'
  },
  {
    type: 'threading_join',
    message0: '等待线程 %1 结束',
    args0: [
      {
        type: 'input_value',
        name: 'THREAD',
        check: 'thread'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'threading',
    tooltip: '等待线程执行完成'
  },
  {
    type: 'queue_create',
    message0: '创建队列',
    output: 'queue',
    style: 'queue',
    tooltip: '创建一个空队列'
  },
  {
    type: 'queue_enqueue',
    message0: '入队 %1 到队列 %2',
    args0: [
      {
        type: 'input_value',
        name: 'ITEM'
      },
      {
        type: 'input_value',
        name: 'QUEUE',
        check: 'queue'
      }
    ],
    previousStatement: null,
    nextStatement: null,
    style: 'queue',
    tooltip: '将元素添加到队列末尾'
  },
  {
    type: 'queue_dequeue',
    message0: '从队列 %1 出队',
    args0: [
      {
        type: 'input_value',
        name: 'QUEUE',
        check: 'queue'
      }
    ],
    output: 'Any',
    style: 'queue',
    tooltip: '移除并返回队列的第一个元素'
  },
  {
    type: 'queue_is_empty',
    message0: '队列 %1 是否为空',
    args0: [
      {
        type: 'input_value',
        name: 'QUEUE',
        check: 'queue'
      }
    ],
    output: 'Boolean',
    style: 'queue',
    tooltip: '检查队列是否为空'
  },

  // ... 已有代码 ...


])
